Docker란?

도커에 대해 알아보기

Posted by ChaelinJ on March 06, 2021

Docker란 말은 많이 들었는데 어디에 어떻게 사용되는지 감을 잡기 어렵네요.

이번 게시글을 계기로 확실한 개념을 잡고 가도록 하겠습니다.

도커 설치는 다음 글에서 참조해주세요.

Docker 설치

1. Docker 도커란?

애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다.

  • 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징
    • 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다.
  • 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.

2. Docker 작동 방식

Docker는 코드를 실행하는 표준 방식을 제공합니다.

가상 머신(VM)이 서버 하드웨어를 가상화하는 방식과 비슷하게(직접 관리해야 하는 필요성 제거) 컨테이너는 서버 운영 체제를 가상화합니다.

  • 가상화 해당 하드웨어에 운영 체제를 직접 설치하는 대신 하이퍼바이저 소프트웨어를 설치하여 하나의 물리적 시스템을 가상 머신이라는 분리된 여러 가상 환경으로 분할하는 방식을 구현

  • 컨테이너화 커널 하나에 격리된 여러 개의 사용자 공간 인스턴스가 포함될 수 있도록 애플리케이션 수준에서 이루어지는 가상화의 일종입니다. 이런 인스턴스를 컨테이너라고 합니다.

출처: https://aws.amazon.com/ko/docker/

3. VM과 컨테이너의 차이

성능
  • VM
    가상 머신마다 전용 운영 체제가 있기 때문에 가상 머신에 구축된 애플리케이션을 실행할 때 메모리 사용량이 필요 이상으로 많아집니다. 이로 인해 가상 머신이 호스트에 필요한 리소스를 모두 사용해 버릴 수도있습니다.
  • 컨테이너
    기존 가상화와 달리 컨테이너화된 애플리케이션은 완전한 가상 머신보다 리소스를 더 적게 사용하고 호스트 메모리에 가해지는 부담을 줄일 수 있도록 운영 체제 환경(커널)을 공유합니다.
무게
  • VM
    가상 머신은 디스크 공간을 많이 차지할 수 있습니다. VM이 호스트하는 애플리케이션과 함께 전체 운영 체제와 관련 도구도 포함하기 때문입니다.
  • 컨테이너
    컨테이너는 상대적으로 가볍습니다. 컨테이너화된 애플리케이션을 실행하는 데 필요한 라이브러리와 도구만 포함하기 때문에 가상 머신보다 더 작고 더 빨리 시작됩니다.
업데이트와 유지보수
  • VM
    운영 체제를 업데이트하거나 패치할 경우 기존 컴퓨터를 하나씩 업데이트해야 하고 각 게스트 OS를 개별적으로 패치해야 합니다.
  • 컨테이너
    컨테이너의 경우 컨테이너 호스트(컨테이너를 호스트하는 컴퓨터)의 운영체제만 업데이트하면 됩니다. 따라서 유지관리가 매우 간소화됩니다.

출처: https://www.alibabacloud.com/ko/knowledge/difference-between-container-and-virtual-machine

구조

출처: https://aws.amazon.com/ko/docker/

4. Docker 관련 용어

컨테이너 이미지

컨테이너를 만드는 데 필요한 모든 종속성 및 정보를 포함한 패키지입니다.

즉, 특정 프로세스를 실행하기 위한 모든 파일과 설정 값을 지닌 것으로 더이상의 의존성 파일을 컴파일이나 추가적인 설치가 필요 없는 상태의 파일을 의미합니다.

이미지를 컨테이너에 담고 실행을 시킨다면 해당 프로세스가 동작하게 됩니다.

실행 방식 예시: 어떤 애플리케이션을 이미지로 만든다면 리눅스만 설치된 컨테이너에 애플리케이션을 설치하고 그 상태를 그대로 이미지로 저장합니다.

Dockerfile

Docker 이미지를 빌드하기 위한 지침을 포함하는 텍스트 파일입니다.

배치 스크립트처럼 첫 번째 줄에 지정된 기본 이미지에서 시작한 다음, 필요한 작업 환경이 완성될 때까지 지침에 따라 필요한 프로그램을 설치하고 파일을 복사하는 등의 작업을 수행합니다.

Dockerfile은 왜 필요할까요? 이 부분은 입문 단계인 저한테는 잘 와닿지 않았지만 익혀가는 중에 유용한 부분이라 생각해 좋은 내용이 있는 블로그 링크를 첨부합니다. Dockerfile 개요 및 간단한 작성법 가이드

빌드

컨테이너 이미지를 빌드하는 작업입니다.

해당 Dockerfile에서 제공하는 정보 및 컨텍스트에 외에도 이미지를 빌드하는 폴더의 추가 파일에 기반하여 수행됩니다.

docker build
컨테이너

Docker 이미지의 인스턴스입니다. 컨테이너는 단일 애플리케이션, 프로세스 또는 서비스의 실행을 나타냅니다.


아직 도커 시작 단계에선 여기까지만 알아보면 될 거 같습니다.

추가적인 용어에 대해선 아래 출처 링크를 참고해주세요.

출처: https://docs.microsoft.com/ko-kr/dotnet/architecture/microservices/container-docker-introduction/docker-terminology


감사합니다.

Text by Chaelin. Photographs by Chaelin, Unsplash.